/*
 * @Author: wangshuixin 2412658453@qq.com
 * @Date: 2024-06-16 15:14:48
 * @LastEditors: wangshuixin 2412658453@qq.com
 * @LastEditTime: 2024-11-05 14:19:52
 * @FilePath: /tspods/utils/string.ts
 * @Description: 字符串
 */
/**
 * @function 生成一个唯一字符串，用于生成唯一hash值
 * @param {number} index 用于增加复杂度的坐标值
*/
export const createUniqueString = (index: number) => {
  return index + '-' + getLocalEnvTimestamp()+ '-' + createRandomNumbers();
}

/**
 * @function 去除字符串中的所有空格
 * @param {string} str 待处理字符串
*/
export const clearAllSpace = (str: string) => {
  return str.replace(/\s/g, '')
}

/**
 * @function 判断字符串中是否存在字母
 * @param {string} str 待判定字符串
*/
export const stringContainChars = (str: string) => {
  return /[a-zA-Z]/.test(str)
}

/**
 * @function 获取项的符号
 * @param {string | undefined} type 1：加 2：减 3：乘 4：除（未填写type或类型错误，则默认为乘）
*/
export const getSymbol = (type: string | undefined): string => {
  switch (type) {
    case '1':
      return '＋'
    case '2':
      return '－'
    case '4':
      return '÷'
    default:
      return '' // 乘
  }
}

/**
 * @function 深拷贝对象
 * @param {object} tempObj 待处理对象
*/
export const safeDeepCopy = (tempObj: object | undefined) => {
  return tempObj ? JSON.parse(JSON.stringify(tempObj)) : tempObj
}

/**
 * @function 判断字符串中是否存在“+”号或“-”号
 * @param {string} str 待判定字符串
*/
export const stringContainPlusOrMinus = (str: string) => {
  // 使用正则表达式查找字符串中的 “+” 或 “-”， 测试字符串是否匹配正则表达式
  return /[+-]/.test(str)
}

/**
 * @function 获取字符串中数字或字母
 * @param {string} str 待处理的字符串
 * @param {string} type 获取到值的类型 - number：数字;string：字母;
 * @param {boolean} sourceType 是否只返回结果数组中的第一个元素，默认true
*/
export const getNumberOrCharFromString = (str: string, type: string = 'number', sourceType: boolean = true) => {
  if (type === 'string') {
    const arr = str.match(/[a-zA-Z]+/g) || []
    return sourceType ? (arr.length > 0 ? arr[0] : undefined) : arr
  } else {
    const arr = str.match(/\d+/g) || []
    return sourceType ? (arr.length > 0 ? arr[0] : undefined) : arr
  }
}

/**
 * @function 字母约分 - 将相同字母进行消除
 * @param {string} previousStr 被除数
 * @param {string} nextStr 除数
 * @attention 全部参数均为字母，且{previousStr的字母集} ⊇ {nextStr的子母集}
*/
export function reduceNumCharsFraction(previousStr: string, nextStr: string) {
  let result = ''
  const resultChars = previousStr.split('')
  let nextChars = nextStr.split('') // 将nextStr转换为字符数组
  
  for (let i = 0; i < resultChars.length; i++) {
    let char = resultChars[i]
    let index = nextChars.indexOf(char); // 查找char在nextChars中的索引
    if (index !== -1) {
      // 如果找到了，移除nextChars中的第一个匹配字符
      nextChars.splice(index, 1);
    } else {
      // 如果没有找到，将这个字符添加到结果字符串
      result += char;
    }
  }

  return result
}